package sensorLAN.UICLiente;

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//import java.awt.event.MouseAdapter;
//import java.awt.event.MouseEvent;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

import clienteServidor.Cliente;
import sensorLAN.archivos.DatosArchivos;

public class IconoBarraTareas extends TrayIcon{
	private MenuItem acercaItem, detenerItem, iniciarItem, salirItem;
	private Cliente cliente;
	
	private IconoBarraTareas() {
		super(crearImagen(DatosArchivos.CARPETA+DatosArchivos.SENSOR16,
				"Imagen del Icono de la barra de tareas"),"Cliente SensorLAN");
		
		this.setPopupMenu(agregarPopPupMenu());
		
		tratarEventor();
		
	}
	
	public IconoBarraTareas(Cliente cliente){
		this();
		this.cliente= cliente;
		this.cliente.iniciarCliente();
		cambiarEstadoBotonesCliente();
	}
	
	private PopupMenu agregarPopPupMenu() {
		PopupMenu popup = new PopupMenu();
		
		acercaItem = new MenuItem("Acerca de....");
		detenerItem = new MenuItem("Detener");
		iniciarItem = new MenuItem("Iniciar");
        salirItem = new MenuItem("Salir");
        
        popup.add(acercaItem);
        popup.addSeparator();
        popup.add(iniciarItem);
        popup.add(detenerItem);
        popup.addSeparator();
        popup.add(salirItem);
		return popup;
	}

	private void tratarEventor() {
		//el cliente ya comienza iniciado;
		iniciarItem.setEnabled(false);
				
		salirItem.addActionListener(new OyenteSalir(this));
		
		acercaItem.addActionListener(new ActionListener() {
            @Override
			public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,
                        "Hecho para el Recinto Digital");
            }
        });
		
		iniciarItem.addActionListener(new ActionListener() {
            @Override
			public void actionPerformed(ActionEvent e) {
            	//esta linea es solo cuando se ejecuta la interfaz sin un cliente
            	if(cliente == null) return;
            	
            	//detener actual cliente
            	cliente.detenerCliente();
            	
            	//iniciar uno nuevo
            	cliente= new Cliente();          	
            	cliente.iniciarCliente();
            	cambiarEstadoBotonesCliente();
            }
        });
		
		detenerItem.addActionListener(new ActionListener() {
            @Override
			public void actionPerformed(ActionEvent e) {
            	if(cliente == null) return;

            	//solo detener el cliente acltual
            	cliente.detenerCliente();
            	cambiarEstadoBotonesCliente();
            }
        });
		
		addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,
                        "This dialog box is run from System Tray");
            }
        });
		/*
		this.addMouseListener(new MouseAdapter(){
			@Override
			public void mouseClicked(MouseEvent arg0) {
				cambiarEstadoBotonesCliente();						
			}			
		});*/
	}
	
	private void cambiarEstadoBotonesCliente(){
		iniciarItem.setEnabled(!cliente.isContinuar());
    	detenerItem.setEnabled(cliente.isContinuar());
	}
	
	protected static Image crearImagen(String path, String descripcion) {
    	File f= new File(path);
    	
    	return (new ImageIcon(f.getAbsolutePath(), descripcion)).getImage();
    }
	
	public static void main(String[] args) {
		final TrayIcon trayIcon = new IconoBarraTareas();
        final SystemTray tray = SystemTray.getSystemTray();
        
        try {
            tray.add(trayIcon);
        } catch (AWTException e) {
            System.out.println("TrayIcon no puede ser cargado.");
            return;
        }
	}
}
